#ifndef _GORBATRAS_FBXBONE
#define _GORBATRAS_FBXBONE

#include "Gorbatras_Library.h"

namespace GC
{
	class FbxBone
	{
		public:
			typedef std::shared_ptr<FbxBone> Ptr;

			FbxBone(const FbxCluster* a_cluster, FbxNode* a_boneNode ,const fbxsdk_2014_1::FbxMesh* a_mesh, const FbxNode* a_rootNode);

			const int GetID() const;
			const FbxString GetName() const;			

			const int GetParentID() const;
			const FbxString GetParentName() const;

			const VectorConstDouble GetTransform() const;
			const VectorConstDouble GetBindTransform() const;

			const size_t GetLinkIndicesSize() const;
			const VectorConstInt GetLinkIndices() const;
			const VectorConstDouble GetWeightValues() const;
		private:
			const int m_id;
			const FbxString m_name;			

			FbxString m_parentName;
			/// <summary>
			/// If there is no parent this will be -1
			/// </summary>
			int m_parentID;
			//The transform (scaling, rotation, translation)
			VectorConstDouble m_transform;
			//Ze bind transform
			VectorConstDouble m_bindTransform;
			//The amount of link indexes/indices
			const int m_linkIndicesCount;
			//The index of the mesh vertex point in the vertices array
			VectorConstInt m_linkIndices;
			//The weightvalue on each link index
			VectorConstDouble m_weightValues;
			//Sets m_transform & m_bindtransform
			void SetGlobalPosition(const FbxCluster* a_cluster, FbxNode* a_boneNode, const fbxsdk_2014_1::FbxMesh* a_mesh, const FbxNode* a_rootNode);
	};
}

#endif